import { delToken, getToken, setToken } from '@/utils/storage'

// import se
export default {
  namespaced: true,
  state: () => ({
    // 刷新，或者一进入页面的时候，优先从本地取
    token: getToken() || ''
  }),
  getters: {},
  mutations: {
    setUserToken (state, payload) {
      state.token = payload
      // 本地也存一份token
      setToken(payload)
    },
    logOut (state) {
      state.token = null
      // 本地localStorage也要删
      delToken()
    }
  },
  actions: {}
}

// 在mutation中存token的流程
// 1. state中定义token数据
// 2. 定义mutation方法, 用它来更新token数据
// 3. 在登录组件获取到token数据后，要提交commit触发mutation
//    this.$store.commit('模块名/mutation方法', 参数)

// 关于token的持久化处理
// 因为我们现在token存在Vuex中，页面一刷新，Vuex的state数据会丢失，将会导致请求异常
// 所以我们需要对token做持久化处理，保证刷新页面之后token不会丢失

// 1. 在对token进行初始化的时候，先从本地调用getToken取一下，优先使用本地存的token
// 2. 在设置更新token的时候，Vuex中更新一份，本地local也要同步更新一份
// 3. 在删除token的时候，（退出登录的时候）Vuex中要删掉token，localStorage中也要删掉
